/*
request.ts
1:下载axios
2:导入axios
3:创建axios副本(配制基地址之类处理)
4:加入请求与响应拦截,并暴露出去
5:在api中导入使用
*/

import type { ApiRes } from '@/types/login'
import axios from 'axios'
import { showFailToast } from 'vant'

const request = axios.create({
  // 基地址没使用环境就是
  baseURL: import.meta.env.VITE_URL
})

request.interceptors.request.use(
  config => {
    return config
  },
  err => {
    return Promise.reject(err)
  }
)
request.interceptors.response.use(
  res => {
    // 状态码以2开头 200-299
    if (res.data.code === 10000) {
      return res.data
    } else {
      // 错误提示
      showFailToast(res.data.message)
      // 抛出一个错误中止后面代码执行  return Promise.reject
      return Promise.reject(new Error(res.data.message))
    }
  },
  err => {
    // 状态码非2开头
    return Promise.reject(err)
  }
)

function ajax<T> (obj: { url: string; method?: string; data?: object; params?: object }) {
  return request<any, ApiRes<T>>(obj)
}

export default ajax
